<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数的增强</title>
</head>
<body>
    
</body>
<script>
    // 默认参数
    // function fun1(name = 'shane',age = 12){
    //     console.log(name,age);
    // } 
    
    // fun1() // ts typescript js=>java  int string 

    // //rest 参数  扩展符...  可以多个参数
    
    // //es6 箭头函数 匿名函数高级用法

    // //es5 普通函数 声明式函数
    // // function fn() {
    // //     console.log(1);
    // // }

    // // fn()

    // // 匿名函数
    // // a = function(c,d){
    // //     console.log(c,d);
    // // }

    // // a()

    // //es6 可以改写匿名函数为箭头函数， 初步理解就是箭头函数是匿名函数的简写
    // b = (c,d) =>{
    //     console.log(c,d);
    // }
    // b(1,2)

    // //对象的增强
    // //es5
    // const obj = {
    //     run:function(){

    //     }
    // }
    // const obj3 = {
    //     run:()=>{

    //     }
    // }


    // //es6
    // const obj2 = {
    //     run(){
            
    //     }
    // }

    // //箭头函数的特性
    // //1. 如果箭头函数参数只有一个，可以省略括号

    // b = c =>{
    //     console.log(c);
    // }

    // // 2. 如果有默认参数，括号不能省略
    // b = (c=2) =>{
    //     console.log(c);
    // }

    // // 3. 在箭头函数中，如果只有一行代码，且是return，也就是回调函数，那么还可以省略大括号和return。
    // b = c => c

    // // 4. 箭头函数影响this指向
    // console.log(this); // window
    _that = this
    let obj4 = {
       run:function(){
        console.log(this); // 输出了obj4
       },
       watch:()=>{
        console.log(this); //输出了window
       } 
    }


    obj4.run()
    obj4.watch()

    // 在匿名函数中，function 里面this 指向函数使用者
    // 在箭头函数中，this 指向 函数声明位置，通常是window




</script>
</html>